周边POI搜索 Sample详情
最后更新时间:2020年12月15日
POI的周边搜索,即为范围查询方式,根据用户设置的查询范围(支持圆、矩形),可结合信息类型等条件进行查询,搜索满足条件的POI信息点,最后可以通过标注、绘制或者列表方式展示查询到的兴趣点。
周边搜索的实现方法与关键字搜索基本上类似,实现的思路与方法如下:
1
与关键字POI搜索相同。
//创建POI查询对象 PoiSearch poiSearch = new PoiSearch(); //为POI查询对象设置配置好的.db数据,并以此来初始化 poiSearch.initWithDBPath(Environment.getExternalStorageDirectory().getPath()+"/MapGISSample/POI/WuHanPOI.db"); //设置查询每页的结果数目 poiSearch.setPageSize(20);
2
周边搜索,通过PoiSearch类对象调用setBound方法设置范围条件,调用setQuery方法设置查询属性条件。
首先,需要创建查询范围对象PoiSearch.SearchBound,根据不同的参数来构造,可以实现圆形范围、矩形范围两种周边搜索方式。一般实现范围查询时,可将查询的范围事先绘制在地图上,待查询POI之后可对比效果,但要注意坐标系一致的问题。
//坐标点 Dot dot = new Dot(12725830.65, 3571659.71); //查询范围(坐标点、半径) PoiSearch.SearchBound searchBound = new PoiSearch.SearchBound(dot, 200);
//矩形范围 Rect queryBound = new Rect(12725430, 3571159,12726230, 3571959); //查询范围(rect矩形) PoiSearch.SearchBound searchBound = new PoiSearch.SearchBound(queryBound); //为POI查询对象设置查询范围 mPoiSearch.setBound(searchBound);
设置了查询范围,如果需要进行POI的分类查询,还需要利用setQuery方法设置查询条件,POI类型参考关键字搜索模块中的说明。当然,也可以周边搜索和关键字搜索两种模式结合。
//设置POI查询条件:POI分类查询,如查询“中餐厅”类型 PoiSearch.Query query = new PoiSearch.Query(null, PoiTypeDef.FoodBeverages); poiSearch.setQuery(query);
3
查询POI,遍历查询结果,实现代码与关键字搜索一样,也可通过多种形式展示,核心代码参考关键字搜索小节。
//查询并返回结果 PoiPagedResult searchPoiResult = poiSearch.searchPOI(); //判断是否查询到了结果 if (searchPoiResult != null && searchPoiResult.getTotalPOICount() > 0) { //遍历所有页 for (int i = 1; i <= searchPoiResult.getPageCount(); i++) { List<PoiItem> poiItemList = searchPoiResult.getPage(i); //获取每一页的结果集,从1开始 for (int j = 0; j < poiItemList.size(); j++) {//遍历每一页的结果项 //获取POI项 PoiItem poiItem = poiItemList.get(j); //获取POI点信息:坐标、名称、地址、电话 Dot point = poiItem.getPoint(); String name = poiItem.getName(); String address = poiItem.getAddress(); String phoneNum = poiItem.getTel(); } } mapView.refresh(); //地图刷新 } else { Toast.makeText(this, "查询结果为空", Toast.LENGTH_SHORT).show(); }
POI周边搜索实现效果如下图所示: